import java.util.Scanner;

public class ThreadDemo17 {
    static class Counter {
        volatile public int flag=0;
        //volatile 禁止编译器的直接优化
    }

    public static void main(String[] args) {
        Counter counter=new Counter();

        Thread t1=new Thread() {
            @Override
            public void run() {
                while (counter.flag==0) {
                    //由于循环快速地读取 counter.flag，
                    //编译器直接进行优化，不再每次都从内存中读取flag,而是从内存中读取一次后，后续都直接从CPU中读取
                    
                }
                System.out.println("循环结束");
            }
        };
        t1.start();


        Thread t2=new Thread() {
            @Override
            public void run() {
                //让用户输入一个整数，这个整数替换 counter.flag的值
                //对于　counter.flag值的修改是在内存上进行的
                Scanner scanner=new Scanner(System.in);
                System.out.println("输入一个整数");
                counter.flag=scanner.nextInt();
            }
        };
        t2.start();
    }
}
